package me.zhengjie.utils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

/**
 * 日期时间工具类，提供获取当前时间及格式化的静态方法
 */
public class TimeUtils {

    /** 默认日期时间格式 */
    public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    /** 默认日期格式 */
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    /** 默认时间格式 */
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    private TimeUtils() {
        // 私有构造函数，防止实例化
    }

    /**
     * 获取当前日期时间
     * @return 当前日期时间
     */
    public static LocalDateTime getCurrentDateTime() {
        return LocalDateTime.now();
    }

    /**
     * 获取当前日期
     * @return 当前日期
     */
    public static LocalDate getCurrentDate() {
        return LocalDate.now();
    }

    /**
     * 获取当前时间
     * @return 当前时间
     */
    public static LocalTime getCurrentTime() {
        return LocalTime.now();
    }

    /**
     * 获取当前日期时间的字符串表示（默认格式）
     * @return 当前日期时间字符串
     */
    public static String getCurrentDateTimeStr() {
        return formatDateTime(getCurrentDateTime(), DEFAULT_DATETIME_FORMAT);
    }

    /**
     * 获取当前日期的字符串表示（默认格式）
     * @return 当前日期字符串
     */
    public static String getCurrentDateStr() {
        return formatDate(getCurrentDate(), DEFAULT_DATE_FORMAT);
    }

    /**
     * 获取当前时间的字符串表示（默认格式）
     * @return 当前时间字符串
     */
    public static String getCurrentTimeStr() {
        return formatTime(getCurrentTime(), DEFAULT_TIME_FORMAT);
    }

    /**
     * 格式化日期时间
     * @param dateTime 日期时间
     * @param pattern  格式模式
     * @return 格式化后的字符串
     */
    public static String formatDateTime(LocalDateTime dateTime, String pattern) {
        return dateTime.format(DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 格式化日期
     * @param date    日期
     * @param pattern 格式模式
     * @return 格式化后的字符串
     */
    public static String formatDate(LocalDate date, String pattern) {
        return date.format(DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 格式化时间
     * @param time    时间
     * @param pattern 格式模式
     * @return 格式化后的字符串
     */
    public static String formatTime(LocalTime time, String pattern) {
        return time.format(DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 获取当前年份
     * @return 当前年份
     */
    public static int getCurrentYear() {
        return getCurrentDate().getYear();
    }

    /**
     * 获取当前月份（1-12）
     * @return 当前月份
     */
    public static int getCurrentMonth() {
        return getCurrentDate().getMonthValue();
    }

    /**
     * 获取当前日（1-31）
     * @return 当前日
     */
    public static int getCurrentDay() {
        return getCurrentDate().getDayOfMonth();
    }

    public static void main(String[] args) {
        // 测试示例
        System.out.println("当前日期时间: " + getCurrentDateTimeStr());
        System.out.println("当前日期: " + getCurrentDateStr());
        System.out.println("当前时间: " + getCurrentTimeStr());
        System.out.println("当前年份: " + getCurrentYear());
        System.out.println("当前月份: " + getCurrentMonth());
        System.out.println("当前日: " + getCurrentDay());

        // 自定义格式示例
        System.out.println("自定义格式: " + formatDateTime(getCurrentDateTime(), "yyyy/MM/dd HH:mm:ss"));
    }
}